home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
LIBRARY
/
CMPLTPAS
/
QUIKSORT.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1988-07-14
|
2KB
|
69 lines
{->>>>QuickSort<<<<--------------------------------------------}
{ }
{ Filename : QUIKSORT.SRC -- Last Modified 7/14/88 }
{ }
{ This is your textbook recursive quicksort on an array of key }
{ records, which are defined as the type show below: }
{ }
{ KeyRec = RECORD }
{ Ref : Integer; }
{ KeyData : String30 }
{ END; }
{ }
{ From: COMPLETE TURBO PASCAL 5.0 by Jeff Duntemann }
{ Scott, Foresman & Co., Inc. 1988 ISBN 0-673-38355-5 }
{--------------------------------------------------------------}
PROCEDURE QuickSort(VAR SortBuf : KeyARRAY;
Recs : Integer);
PROCEDURE KeySwap(VAR RR,SS : KeyRec);
VAR
T : KeyRec;
BEGIN
T := RR;
RR := SS;
SS := T
END;
PROCEDURE DoSort(Low, High : Integer);
VAR
I,J : Integer;
Pivot : KeyRec;
BEGIN
{ Can't sort if Low is greater than or equal to High... }
IF Low < High THEN
BEGIN
I := Low;
J := High;
Pivot := SortBuf[J];
REPEAT
WHILE (I < J) AND (SortBuf[I].KeyData <= Pivot.KeyData) DO I := I + 1;
WHILE (J > I) AND (SortBuf[J].KeyData >= Pivot.KeyData) DO J := J - 1;
IF I < J THEN KeySwap(SortBuf[I],SortBuf[J]);
UNTIL I >= J;
KeySwap(SortBuf[I],SortBuf[High]);
IF (I - Low < High - I) THEN
BEGIN
DoSort(Low,I-1); { Recursive calls to DoSort! }
DoSort(I+1,High)
END
ELSE
BEGIN
DoSort(I+1,High); { Recursive calls to DoSort! }
DoSort(Low,I-1)
END
END
END;
BEGIN
DoSort(1,Recs);
END; { QuickSort }